import password from '@/models/password';
import { setUserCookie } from '@/utils/Auth/auth';
import { addLogs } from '@/services/logs';
import md5 from 'js-md5';
import dwUser from '@/models/dwUser';
import dayjs from 'dayjs';
import { queryDingTalkIdByUserNames } from '../dingtalk/apis';

interface userlogin {
  userName: string;
  password: string;
}

interface userinfo {
  userId: string;
  userName: string;
  dingTalkUserId: string;
  name: string;
  personId: string;
}

interface DingPersonType {
  userName: string;
  dingTalkUserId: string;
}

export const handleLogin = async (params: any) => {
  // const res: any = await password.findPerson(params);
  // if (res && res[0]) {
  //   const person = res[0];
  //   // 日志
  //   addLogs(3, 11, person.name, [], person.personId);
  //   const token: string = await setUserCookie({ personId: String(person.personId), personName: person.name });
  //   // 往mongo存一份
  //   await password.update({ token }, { _id: person._id });
  //   return {
  //     ...person,
  //     token,
  //     name: person.name,
  //   };
  // }
  // throw new Error('用户或密码错误');
  // 从dwUser表查询用户信息，没有的话调居友会接口获取当前用户。
  // 如果接口返回数据，那么插入本地数据库，设置默认密码为123456。用户角色为普通用户。
  // 如果接口没有返回，throw error用户不存在。
  // 如果本地存在，直接返回用户信息。
  const res = await dwUser.findOne({ userName: params.userName });

  if (res) {
    if (res.isDelete === 1) {
      throw new Error('当前用户已被删除');
    }
    if (res.password !== params.password) {
      throw new Error('用户或密码错误');
    }
    const person = res;
    delete person.password;
    // 日志
    addLogs(3, 11, person.userName, [], person._id);
    const token: string = await setUserCookie({ personId: String(person._id), personName: person.userName, role: person.role });
    return {
      ...person,
      token,
      name: person.name,
    };
  }
  // const { userName } = params;
  // const res1 = await queryDingTalkIdByUserNames({ userNames: [userName] });
  // if (res1 && res1[0]) {
  //   console.log(res1, '本地库不存在用户，去钉钉获取用户信息');
  //   const dingPerson: DingPersonType = res1[0];
  //   addLogs(3, 11, dingPerson.userName, [], dingPerson.dingTalkUserId);
  //   // 往数据库里存一份
  //   const save: any = await dwUser.insert({
  //     ...result,
  //     password: md5('123456'),
  //     isDelete: 1,
  //     gmtCreated: dayjs().format('YYYY-MM-DD HH:mm:ss'),
  //     updateTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
  //   });
  //   // 生成cookie
  //   const token: string = await setUserCookie({ personId: String(save.insertedId), personName: dingPerson.userName });
  //   await dwUser.update({ token, personId: save.insertedId }, { _id: save.insertedId });
  //   return {
  //     ...result,
  //     personId: save.insertedId,
  //     token,
  //     name: dingPerson.userName,
  //   };
  // }
  throw new Error('当前用户不存在');
};

export const handleLogout = async (params) => {
  await password.update({ token: undefined }, params);
  return true;
};
